package com.ykl.demo.entity;

import com.ykl.base.restful.validator.OptionVals;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.validator.constraints.Length;

import javax.persistence.*;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

/**
 * 局站，用于安置通信设备若干建筑物的集合；基站站点作为局站的一种，局站类型：2010004基站站点。
 * 主表：SPC_STATION    从表：无      关联：无.
 */
@Data
@Entity
@Table(name = "SPC_STATION")
public class SpcStation {
    /**
     * SPC_STATION	STATION_ID	局站ID	关键字ID，该ID全网唯一。	CHAR(24).
     */
    @Id
    @org.springframework.data.annotation.Id
    @GeneratedValue(generator = "snowflakeIdentifierGenerator",
            strategy = GenerationType.IDENTITY)
    @GenericGenerator(
            name = "snowflakeIdentifierGenerator",
            strategy = "com.ykl.base.jpa.SnowflakeIdentifierGenerator"
    )
    @Column(
            name = "STATION_ID",
            columnDefinition = "VARCHAR(24) COMMENT '局站ID\t关键字ID，该ID全网唯一。'",
            length = 24
    )
    @ApiModelProperty("局站ID")
    @Length(max = 24,message = "局站id不能超过24字符")
    private String stationId;


    /**
     * SPC_STATION	CHINA_NAME	局站名称	局站在资源管理系统中的唯一名称	VARCHAR2(100)
     */
    @Column(
            name = "CHINA_NAME",
            columnDefinition = "VARCHAR(100) COMMENT '局站名称,局站在资源管理系统中的唯一名称'"
    )
    @ApiModelProperty(value = "局站名称", notes = "局站在资源管理系统中的唯一名称")
    @Length(max = 100, message = "局站名称不能超过100字符")
    @NotNull(message = "局站名称不能为空")
    private String chinaName;

    /**
     * SPC_STATION	ALIAS	局站别名	局站别名	VARCHAR2(80).
     */
    @Column(
            name = "ALIAS",
            columnDefinition = "VARCHAR(80) COMMENT '局站别名'"
    )
    @ApiModelProperty(value = "局站别名")
    @Length(max = 80,message = "局站别名不能超过100字符")
    private String alias;

    /**
     * SPC_STATION	STREET	所属街道、乡镇	机房所属街道、乡镇	VARCHAR2(255)
     */
    @Column(
            name = "STREET",
            columnDefinition = "VARCHAR(255) COMMENT '所属街道、乡镇\t机房所属街道、乡镇'"
    )
    @ApiModelProperty(value = "所属街道",notes = "所属街道、乡镇\t机房所属街道、乡镇")
    @Length(max = 255,message = "所属街道不能超过255字符")
    private String street;

    /**
     *  SPC_STATION	X	经度(GCJ02)	局站在地图上的经度坐标，gcj02火星坐标系。精确到小数点后六位。如：XXX．123456	NUMBER(20,10)
     */
    @Digits(integer=3, fraction=6, message = "局站在地图上的地图经度坐标精确到小数点后六位，如：XXX．123456")
    @Column(
            name = "X",
            columnDefinition = "NUMERIC(20,10) COMMENT '局站在地图上的经度坐标，gcj02火星坐标系。精确到小数点后六位。'"
    )
    @ApiModelProperty(value = "经度(GCJ02)",notes = "局站在地图上的经度坐标，gcj02火星坐标系。精确到小数点后六位。如：XXX．123456")
    private BigDecimal x;

    /**
     * SPC_STATION	Y	纬度(GCJ02)	局站在地图上的纬度坐标，gcj02火星坐标系。精确到小数点后六位。如：XX．123456	NUMBER(20,10)
     */
    @Digits(integer=3, fraction=6, message = "局站在地图上的纬度坐标，gcj02火星坐标系。精确到小数点后六位。如：XX．123456")
    @Column(
            name = "Y",
            columnDefinition = "NUMERIC(20,10) COMMENT '局站在地图上的纬度坐标，gcj02火星坐标系。精确到小数点后六位。如：XX．123456'"
    )
    @ApiModelProperty(value = "纬度(GCJ02)",notes = "局站在地图上的纬度坐标，gcj02火星坐标系。精确到小数点后六位。如：XX．123456")
    private BigDecimal y;

    /**
     * SPC_STATION	ADDR_SEGM_ID	标准地址	局站绑定的标准地址，引用表ADDR_SEGM.SEGM_ID字段。	CHAR(24)
     */
    @Column(
            name = "ADDR_SEGM_ID",
            columnDefinition = "CHAR(24) COMMENT '标准地址,局站绑定的标准地址，引用表ADDR_SEGM.SEGM_ID字段。'"
    )
    @ApiModelProperty(value = "标准地址",notes = "局站绑定的标准地址，引用表ADDR_SEGM.SEGM_ID字段。")
    @Length(max = 24,message = "局站绑定的标准地址id不能超过24字符")
    private String addrSegmId;

    /**
     * SPC_STATION	LOCATION	局站描述地址	局站描述地址，可以作为标准地址的补充说明	VARCHAR2(200)
     */
    @Column(
            name = "LOCATION",
            columnDefinition = "VARCHAR(200) COMMENT '局站描述地址\t局站描述地址，可以作为标准地址的补充说明'"
    )
    @ApiModelProperty(value = "局站描述地址",notes = "局站描述地址，可以作为标准地址的补充说明")
    @Length(max = 200,message = "局站描述地址不能超过200字符")
    private String location;

    /**
     * SPC_STATION	TYPE_ID	局站类型	引用数据库字典值.NUMBER(8)
     * <ul>取值如下：
     *  <li>2010052-国际</li>
     *  <li>2010021-省际长途</li>
     *  <li>2010022-省内长途</li>
     *  <li>2010023-核心局站</li>
     *  <li>2010024-汇聚局站</li>
     *  <li>2010025-接入局站</li>
     *  <li>2010027-一体化接入局站</li>
     *  <li>2010002-用户局站</li>
     *  <li>2010051-综合业务接入点</li>
     *  <li>2010004-基站站点</li>
     *  <li>2010019-室分局站</li>
     * </ul>
     */
    @Column(
            name = "TYPE_ID",
            columnDefinition = "INT(8) COMMENT '局站类型,引用数据库字典值,取值如下：2010052-国际;2010021-省际长途;2010022-省内长途;2010023-核心局站;2010024-汇聚局站;2010025-接入局站;2010027-一体化接入局站;2010002-用户局站;2010051-综合业务接入点;2010004-基站站点;2010019-室分局站.'"
    )
    @ApiModelProperty(value = "局站类型",notes = "引用数据库字典值",allowableValues = "取值如下：2010052-国际;2010021-省际长途;2010022-省内长途;2010023-核心局站;2010024-汇聚局站;2010025-接入局站;2010027-一体化接入局站;2010002-用户局站;2010051-综合业务接入点;2010004-基站站点;2010019-室分局站.")
    @OptionVals(value = {"2010052","2010021","2010022","2010023","2010024","2010025","2010027","2010002","2010051","2010004","2010019"}
    ,message = "局站类型字段(typeId)的值异常,取值如下：2010052-国际;2010021-省际长途;2010022-省内长途;2010023-核心局站;2010024-汇聚局站;2010025-接入局站;2010027-一体化接入局站;2010002-用户局站;2010051-综合业务接入点;2010004-基站站点;2010019-室分局站"
    )
    private Integer typeId;
    /**
     * SPC_STATION	GRADE_ID	局站等级	采用数据字典值 NUMBER(8).
     * <ul>取值如下：
     *  <li>2010109-乡镇</li>
     *  <li>2010110-城市</li>
     *  <li>2010111-农村</li>
     * </ul>.
     */
    @Column(
            name = "GRADE_ID",
            columnDefinition = "INT(8) COMMENT '局站等级,采用数据字典值,取值如下：2010109-乡镇;2010110-城市;2010111-农村.'"
    )
    @ApiModelProperty(value = "局站等级",notes = "采用数据字典值", allowableValues = "取值如下：2010109-乡镇;2010110-城市;2010111-农村.")
    @OptionVals(value = {"2010109","2010110","2010111"},
            message = "局站等级(gradeId)采用数据字典值,取值如下：2010109-乡镇;2010110-城市;2010111-农村.")
    private Integer gradeId;

    /**
     * SPC_STATION	CODE	铁塔站址编码	当局站类型是基站站点时且租用铁塔公司铁塔情况下必填，来源于铁塔的站址编码	VARCHAR2(80)
     */
    @Column(
            name = "code",
            columnDefinition = "VARCHAR(80) COMMENT '铁塔站址编码,当局站类型是基站站点时且租用铁塔公司铁塔情况下必填，来源于铁塔的站址编码'"
    )
    @ApiModelProperty(value = "铁塔站址编码",notes = "当局站类型是基站站点时且租用铁塔公司铁塔情况下必填，来源于铁塔的站址编码")
    @Length(max = 80)
    private String code;

    /**
     * SPC_STATION	IS_SHARE	是否共享	表征此局站是否共享，取值：是（1）/否（0）	NUMBER(8).
     */
    @Column(
            name = "IS_SHARE",
            columnDefinition = "INT(8) COMMENT '是否共享,表征此局站是否共享，取值：是（1）/否（0）'"
    )
    @ApiModelProperty(value = "是否共享",notes = "表征此局站是否共享", allowableValues = "取值：是（1）/否（0）")
    @OptionVals(value = {"0","1"},
            message = "是否共享(isShare),表征此局站是否共享，取值：是（1）/否（0）.")
    private Integer isShare;

    /**
     * SPC_STATION	SHARE_UNIT	共享单位	共享单位    NUMBER(8).
     * <ul>枚举值：
     * <li>2054200-电信</li>
     * <li>2054201-移动</li>
     * <li>2054202-铁塔</li>
     * <li>2054203-电信+移动</li>
     * <li>2054204-其他</li>
     * </ul>.
     */
    @Column(
            name = "SHARE_UNIT",
            columnDefinition = "INT(8) COMMENT '共享单位,枚举值：2054200-电信,2054201-移动,2054202-铁塔,2054203-电信+移动,2054204-其他'"
    )
    @ApiModelProperty(value = "共享单位", allowableValues = "枚举值：2054200-电信,2054201-移动,2054202-铁塔,2054203-电信+移动,2054204-其他")
    @OptionVals(value = {"2054200","2054201","2054202","2054203","2054204"},
            message = "共享单位(shareUnit),枚举值：2054200-电信,2054201-移动,2054202-铁塔,2054203-电信+移动,2054204-其他.")
    private Integer shareUnit;


    /**
     * SPC_STATION	MNT_LEVEL	维护等级	NUMBER（8）
     * <ul>枚举值：
     * <li>2012500-高等级,高等级是指含汇聚层及以上设备或者高话务量基站所在的局站;</li>
     * <li>2012501-普通,普通是指剩余的局站。</li>
     * </ul>
     */
    @Column(
            name = "MNT_LEVEL",
            columnDefinition = "INT(8) COMMENT '维护等级,枚举值：2012500-高等级,高等级是指含汇聚层及以上设备或者高话务量基站所在的局站;2012501-普通,普通是指剩余的局站。'"
    )
    @ApiModelProperty(value = "维护等级", allowableValues = "枚举值：2012500-高等级,高等级是指含汇聚层及以上设备或者高话务量基站所在的局站;2012501-普通,普通是指剩余的局站。")
    @OptionVals(value = {"2012500","2012501"},
            message = "维护等级(mntLevel),枚举值：2012500-高等级,高等级是指含汇聚层及以上设备或者高话务量基站所在的局站;2012501-普通,普通是指剩余的局站.")
    private Integer mntLevel;

    /**
     * SPC_STATION	NOTES	备注	备注信息	VARCHAR2(255)
     */
    @Column(
            name = "NOTES",
            columnDefinition = "VARCHAR(255) COMMENT '备注'"
    )
    @ApiModelProperty(value = "备注")
    @Length(max = 255)
    private String notes;

}
